1. Technical Field
The present invention relates generally to an improved data processing system and, more specifically, to a method, apparatus, and computer instructions for dynamically determining probe enablement using out of process correlating tokens.
2. Description of Related Art
Performance monitoring is often used in optimizing the use of software in a system. A performance monitor is generally regarded as a facility incorporated into a processor to assist in analyzing selected characteristics of a system by determining a machine's state at a particular point in time. One method of monitoring system performance is to monitor the system using a transactional-based view. In this manner, the performance monitor may access the end-user experience by tracking the execution path of a transaction to locate where problems occur. Thus, the end user's experience is taken into account in determining if the system is providing the service needed. The performance monitor used may be any suitable transaction-based monitoring system, such as, for example, IBM Tivoli Monitoring and Transaction Performance, a product of International Business Machines Corporation in Armonk, N.Y.
A number of performance monitoring tools have been developed to monitor and analyze the performance of applications within a system. As Java continues to become the Internet's dominant programming environment, Java applications are becoming increasingly more prevalent as the type of application used to support server and client computers. Java applications are also becoming more increasingly common in intranets and in other types of networks used in businesses.
Java is an object oriented programming language and environment focusing on defining data as objects and the methods that may be applied to those objects. Java supports only a single inheritance, meaning that each class can inherit from only one other class at any given time. Java also allows for the creation of totally abstract classes known as interfaces, which allow the defining of methods that may be shared with several classes without regard for how other classes are handling the methods.
The Java virtual machine (JVM) is a virtual computer component that resides only in memory. The JVM allows Java programs to be executed on a different platform as opposed to only the one platform for which the code was compiled. Java programs are compiled for the JVM. In this manner, Java is able to support applications for many types of data processing systems, which may contain a variety of central processing units and operating systems architectures. To enable a Java application to execute on different types of data processing systems, a compiler typically generates an architecture-neutral file format—the compiled code is executable on many processors, given the presence of the Java run-time system. The Java compiler generates bytecode instructions that are non-specific to a particular computer architecture. A bytecode is a machine independent code generated by the Java compiler and executed by a Java interpreter. A Java interpreter is a part in the JVM that alternately decodes and interprets a bytecode or bytecodes. These bytecode instructions are designed to be easy to interpret on any computer and easily translated on the fly into native machine code.
A known method of monitoring system performance is to insert probes into the bytecode to help identify performance bottlenecks occurring within a transaction. Existing performance monitoring tools may also be used to link user transactions and sub-transactions using correlating tokens, such as ARM (Application Response Measurement) correlators. Correlating tokens are passed in user transactions to allow for monitoring the progress of the user transactions through the system. As an initiator of a transaction may invoke a component within an application and this invoked component can in turn invoke another component within the application, correlating tokens are used to “tie” these transactions together. For example, when a user invokes component A within an application, a transaction is created. Component A may call component B asynchronously to request that component B perform a specific process of the user transaction. Component A passes a unique correlating token with the call. When component B sends the response to component A, component A must be able to determine that the response correlates to the call. Thus, when component B finishes the invoked service, component B calls component A and passes back the original token. This process allows component A to correlate the request and the response.
Problems related to linking user transactions and sub-transactions may occur when a sub-transaction occurs out of process of the initial user transaction. Although known performance monitoring tools provide mechanisms for monitoring applications to identify system bottlenecks, none of these known tools employ bytecode inserted probes to link cross-process or cross-thread sub-transactions into a single user transaction. Using a Java 2 Platform Enterprise Edition (J2EE) transaction in a WebSphere Application Server as an example, if two or more WebSphere processes exist (which may or may not be running on different physical machines) and one process requests a method invocation from an Enterprise Java Bean (EJB) in a second WebSphere process, this unique user transaction should be linked and correlated across both WebSphere processes. Websphere applications, such as WAS, are available from International Business Machines Corporation. WAS is a J2EE application server that provides an operating environment for e-business applications that perform transactions over the internet.
Therefore, it would be advantageous to have a method, apparatus, and computer instructions for linking cross-process or cross-thread sub-transactions, using any given means of passing a correlating token to another process, into one user transaction.